home *** CD-ROM | disk | FTP | other *** search
/ Plug-In Power Pack for Netscape Communicator / Plug-In Power Pack for Netscape Communicator.iso / plugins / dataviews / dvtools / demos / mfgdemo / mfg_main.c < prev    next >
C/C++ Source or Header  |  1997-07-10  |  5KB  |  210 lines

  1. #ifndef lint
  2. static char SccsId[]= "@(#)mfg_main.c    V1.10    3/15/95";
  3. #endif
  4.  
  5. /*------------------------------------------------------------------
  6. | file name -- main.c
  7. |-----------------------------------------------------------------*/
  8.  
  9. #include "std.h"
  10. #include "dvstd.h"
  11. #include "dvtools.h"
  12. #include "Tfundecl.h"
  13. #include "mfg_vars.h"
  14. #include "VOfundecl.h"
  15. #include "VUerfundecl.h"
  16. #include "GRfundecl.h"
  17. #include "mfg_fundecl.h"
  18. #include "MISCfuns.h"
  19.  
  20. #ifdef WINNT 
  21. #include <windows.h>
  22. #endif /* WINNT */
  23.  
  24.  
  25.  
  26. /* This program can be linked to run:
  27. |
  28. |  With 100% CPU usage (which shows updates in a tight loop)
  29. |    comment #define DV_USE_TIMER
  30. |  With Time-Outs (which show update based on a timer.
  31. |    uncomment #define DV_USE_TIMER
  32. */
  33. #define DV_USE_TIMER
  34.  
  35. #ifdef DV_USE_TIMER
  36.  
  37. LOCAL INT interval = 200;
  38. long updating=0;  /* prevent timer from updating screen too often */
  39.  
  40. #ifdef WINNT
  41.  
  42. LOCAL HWND Hwnd;
  43. LOCAL VOID CALLBACK TimeOutProc V_P_((HWND hwnd,
  44.                                       UINT uMsg,
  45.                                       UINT idEvent,
  46.                                       DWORD dwTime));
  47.  
  48. #else /* UNIX */
  49.  
  50. #ifdef CONST
  51. #undef CONST
  52. #endif
  53.  
  54. #ifndef __STDC__
  55. #define _NO_PROTO
  56. #endif
  57.  
  58. /* X11 include files */
  59. #include <X11/Xlib.h>
  60. #include <X11/Intrinsic.h>
  61.  
  62. LOCAL XtAppContext app_context;
  63.  
  64. /***************** Begin Function Declarations *************/
  65. LOCAL  void time_out_proc V_P_((ADDRESS args, XtIntervalId *interval_id));
  66. /***************** End Function Declarations *************/
  67.  
  68. #endif /* Not WINNT */
  69. #endif /* DV_USE_TIMER */
  70.  
  71.  
  72. #define SEARCH_PATH     (CHAR*)NULL
  73. #define DISPFORM_TABLE  (CHAR*)NULL
  74.  
  75.  
  76. /*---------------------------------------------------------------------
  77. |  main()
  78. |    This module is the basic skeleton of a DataViews application.
  79. |
  80. */
  81.  
  82. #ifdef WINNT
  83. int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
  84.                      LPSTR lpCmdLine,  int nCmdShow  )
  85. {
  86.   CHAR *device = "W:=600x480";//NULL;
  87.   OBJECT location;
  88.   INT argc = 0;
  89.   CHAR **argv;
  90.  
  91.   make_argv(&argc,&argv,GetCommandLine());
  92.  
  93. #else  /* Not WINNT */
  94. int 
  95. main (argc, argv)
  96.      int argc;
  97.      char *argv[];
  98. {
  99.  
  100.   CHAR *device = NULL;
  101.   OBJECT location;
  102.  
  103. #endif /* WINNT */
  104.  
  105.  
  106.   /* Initialize Arguments, argv[1] - display device (default is DVDEVICE) */
  107.   if (argc > 1)
  108.     device = argv[1];
  109.  
  110.   /* Initialize */
  111.   /* DataViews Initializaton */
  112.   (VOID) TInit (SEARCH_PATH, DISPFORM_TABLE);
  113.   location = VOloCreate ();
  114.  
  115.   InitDataTable ();             /* found in mfg_rebind.c */
  116.   InitDisplays (device);        /* found in mfg_dsp.c */
  117.  
  118. #ifdef DV_USE_TIMER
  119. #ifdef WINNT
  120.     /* Get the Windows based information */
  121.     (VOID) GRget (V_WIN32_WINDOW_HANDLE, &Hwnd, V_END_OF_LIST);
  122.     
  123.  /* Post a timeout for dynamic updates
  124.   |  The timeout procedure will update the dynamics of
  125.   |  all screens which have been opened. The procedure is invoked
  126.   |  whenever the specified time interval elapses. The interval is
  127.   |  specified in milliseconds.
  128.   */
  129.     SetTimer (Hwnd, (UINT)Hwnd, interval, (TIMERPROC)TimeOutProc);
  130. #else /* UNIX */
  131.   /* Get the Xt based information */
  132.   GRget (V_X_APPLIC_CONTEXT, &app_context, V_END_OF_LIST);
  133.  
  134.   /* Post a timeout for dynamic updates
  135.    |  The timeout procedure will update the dynamics of
  136.    |  all screens which have been opened. The procedure is invoked
  137.    |  whenever the specified time interval elapses. The interval is
  138.    |  specified in milliseconds.
  139.    */
  140.   XtAppAddTimeOut (app_context, interval, 
  141.            (XtTimerCallbackProc) time_out_proc, NULL);
  142. #endif /* WINNT */
  143. #endif /* DV_USE_TIMER */
  144.  
  145.  
  146.   /* Control Loop */
  147.   QuitStatus = (DV_BOOL) NO;
  148.   while (QuitStatus == NO)
  149.     {
  150. #ifdef DV_USE_TIMER
  151.       /* Gather and Process User Inputs
  152.       |    Note: since we posted a time-out, the event
  153.       |    handler will call our function to handle
  154.       |    the updating of dynamic objects.
  155.       */
  156.  
  157.       location = VOloWinEventPoll (V_WAIT);
  158.  
  159. #else  /* Not DV_USE_TIMER */
  160.       /* Update the Display */
  161.       HandleDynamics();
  162.  
  163.       /* Get the Event */
  164.       location = VOloWinEventPoll( V_NO_WAIT );
  165.  
  166. #endif /* DV_USE_TIMER */
  167.       if (location)
  168.         (VOID) VUerHandleLocEvent (location);
  169.     }
  170.  
  171.   /* Termination and Clean Up */
  172.   TermDisplays ();              /* found in mfg_dsp.c */
  173.   TermData ();                  /* found in mfg_data.c */
  174.   (VOID) TTerminate ();         /* DataViews Termination */
  175.  
  176.   exit( EXIT_OK );
  177.   return 1;
  178. }
  179.  
  180. #ifdef DV_USE_TIMER
  181. #ifdef WINNT
  182.  
  183. /*ARGSUSED*/
  184. LOCAL VOID CALLBACK
  185. TimeOutProc (hwnd, uMsg, idEvent, dwTime)
  186.     HWND hwnd;
  187.   UINT uMsg;
  188.     UINT idEvent;
  189.     DWORD dwTime;
  190. {
  191.     updating++;
  192.     if ( updating == 1)
  193.         HandleDynamics ();
  194.     updating--;
  195. }
  196.  
  197. #else /* UNIX */
  198. LOCAL void 
  199. time_out_proc (args, interval_id)
  200.      ADDRESS args;
  201.      XtIntervalId *interval_id;
  202. {
  203.   HandleDynamics ();
  204.   XtAppAddTimeOut (app_context, interval, 
  205.            (XtTimerCallbackProc) time_out_proc, NULL);
  206. }
  207. #endif /* UNIX */
  208. #endif /* DV_USE_TIMER */
  209.  
  210.